//app.js
let util = require("./utils/util");
let common = require("./common/common");

App({
    onLaunch: function () {
        // 展示本地存储能力
        let logs = wx.getStorageSync("logs") || [];
        logs.unshift(Date.now());
        wx.setStorageSync("logs", logs);

        console.log(" in app onLaunch...");


        // 登录
        wx.login({
            success: res => {
                let code = res.code; //返回code
                let that = this;
                console.log(" -> ___res.code: ", res.code);
                // 发送 res.code 到后台换取 openId, sessionKey, unionId
                // 获取用户信息
                wx.getSetting({
                    success: res => {
                        if (res.authSetting["scope.userInfo"]) {
                            // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
                            this.getUserInfo(code);
                        } else {
                            wx.authorize({
                                scope: 'scope.userInfo',
                                success: res => {
                                    console.log("\n\n*****\nget scope.userInfo res: ", res);
                                }
                            })
                        }
                    }
                });

            }
        });

    },

    onShow: function () {
        console.log(" in app onShow...");
    },


    getUserInfo: function (code) {
        let that = this;

        let getUserInfoPromise = util.wxPromisify(wx.getUserInfo);
        let requestPromise = util.wxPromisify(wx.request);

        getUserInfoPromise().then(res => {
            that.globalData.userInfo = res.userInfo;
            wx.setStorageSync("userInfo", res.userInfo);

            let encryptedData = res.encryptedData;
            let iv = res.iv;

            requestPromise({
                url: common.domain + "/api/v1/getSessionKey",
                method: "POST",
                data: {
                    code: code
                },
            }).then(res => {
                let thirdSession = res.data.data.thirdSession;
                requestPromise({
                    url: common.domain + "/api/v1/user/decode",
                    method: "POST",
                    data: {
                        thirdSession: thirdSession,
                        encryptedData: encryptedData,
                        iv: iv
                    },
                }).then(res => {
                    let openId = res.data.data.openId;
                    wx.setStorageSync("openId", openId);
                    console.log("\n\n*****\n-> in promise get openId: ", openId);
                })
            })
        });

        // wx.getUserInfo({
        //     success: res => {
        //         // 可以将 res 发送给后台解码出 unionId
        //         console.log("  ____ getUserInfo res: ", res);
        //
        //         // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
        //         // 所以此处加入 callback 以防止这种情况
        //         if (this.userInfoReadyCallback) {
        //             this.userInfoReadyCallback(res);
        //         }
        //
        //
        //         that.globalData.userInfo = res.userInfo;
        //         wx.setStorageSync("userInfo", res.userInfo);
        //
        //         let encryptedData = res.encryptedData;
        //         let iv = res.iv;
        //
        //         wx.request({
        //             url: common.domain + "/api/v1/getSessionKey",
        //             method: "POST",
        //             data: {
        //                 code: code
        //             },
        //             success: res => {
        //                 console.log("  ____ getSessionKey res: ", res);
        //                 console.log(
        //                     "res.data.data.thirdSession: ",
        //                     res.data.data.thirdSession
        //                 );
        //
        //                 let thirdSession = res.data.data.thirdSession;
        //
        //                 wx.request({
        //                     url: common.domain + "/api/v1/user/decode",
        //                     method: "POST",
        //                     data: {
        //                         thirdSession: thirdSession,
        //                         encryptedData: encryptedData,
        //                         iv: iv
        //                     },
        //                     success: res => {
        //                         console.log(
        //                             "  _____ getOpenId: ",
        //                             res.data.data.openId
        //                         );
        //                         let openId = res.data.data.openId;
        //                         wx.setStorageSync("openId", openId);
        //
        //                         // wx.request({
        //                         //     url: common.domain + common.prefixUrl,
        //                         //     method: "GET",
        //                         //     header: {
        //                         //         "content-type": "application/json"
        //                         //     },
        //                         //     data: {
        //                         //         cond: JSON.stringify({openId: openId})
        //                         //     },
        //                         //     success: res => {
        //                         //         console.log("  __list res", res);
        //                         //         console.log(res.data.data.list);
        //                         //         wx.setStorageSync("list", res.data.data.list);
        //                         //         let list = res.data.data.list;
        //                         //         list = list[0];
        //                         //     }
        //                         // });
        //
        //                     }
        //                 });
        //             }, fail: res => {
        //                 console.log("\n\n*****\n session fail: res: ", res);
        //             }
        //         });
        //     }
        // });
    },


    globalData: {
        userInfo: null,
        list: []
    }
});
